/*
 * ConsultaAgenda.java
 *
 * Created on 18/02/2011, 15:49:31
 */
package pbf.internalframe;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import pbf.dialog.CadastrarFamilia;
import pbf.dialog.AgendarFamilia;
import org.hibernate.Session;
import pbf.conf.hibernate.HibernateUtil;
import pbf.conf.hibernate.entidades.Familia;
import pbf.dialog.EditarFamilia;
import pbf.util.Mensagem;

/**
 *
 * @author Ricardo
 */
public class GestaoFamilia extends javax.swing.JInternalFrame {

    private static Object[] objetos = new Object[3];
    private static Session sessao = null;
    private static ArrayList<Familia> listaFamilia = null;
    private Familia familia = null;
    private AutoCompletar autoCompletar = new AutoCompletar();
    private boolean ganbiara = true;
    public GestaoFamilia() {
        initComponents();
    }

    public void setAtiva() {
        if(ganbiara){
            autoCompletar.start();
            ganbiara = false;
        }

        familiaNome.setText("");
        setTable();
        setVisible(true);
    }

    private static void setTable() {
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();
        model.setNumRows(0);

        sessao = HibernateUtil.openSession();
        sessao.beginTransaction();
        listaFamilia = (ArrayList<Familia>) sessao.createQuery("From pbf.conf.hibernate.entidades.Familia WHERE FAMILIA_ATIVO='S' ORDER BY FAMILIA_NOME").list();

        for (Familia f : listaFamilia) {
            objetos[0] = f.getFamiliaId();
            objetos[1] = f.getFamiliaNome();
            objetos[2] = f.getFamiliaNis();

            model.addRow(objetos);
        }
        sessao.getTransaction().commit();
        sessao.close();
    }

    public static void setTabela(List<Familia> listaFamilia) {
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();
        model.setNumRows(0);

        for (Familia f : listaFamilia) {
            objetos[0] = f.getFamiliaId();
            objetos[1] = f.getFamiliaNome();
            objetos[2] = f.getFamiliaNis();

            model.addRow(objetos);
        }
    }

    public static String getFamiliaNome() {
        return familiaNome.getText();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        familiaNome = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabela = new javax.swing.JTable();
        jSeparator1 = new javax.swing.JSeparator();
        jButton2 = new javax.swing.JButton();
        Editar = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setTitle("Sistema de Agendamento do Programa Bolsa Família");
        setVisible(true);
        getContentPane().setLayout(null);

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel1.setText("Nome do Responsável Famíliar:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(20, 20, 250, 20);

        familiaNome.setFont(new java.awt.Font("Arial", 0, 16)); // NOI18N
        getContentPane().add(familiaNome);
        familiaNome.setBounds(270, 20, 310, 25);

        tabela.setFont(new java.awt.Font("Tahoma", 0, 14));
        tabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"25652", "Ricardo Tavares Antunes de Oliveira", "26587598758"}
            },
            new String [] {
                "ID", "Nome do Responsável", "NIS"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabela.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(tabela);
        tabela.getColumnModel().getColumn(0).setPreferredWidth(60);
        tabela.getColumnModel().getColumn(1).setMinWidth(400);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(300);
        tabela.getColumnModel().getColumn(1).setMaxWidth(200);
        tabela.getColumnModel().getColumn(2).setMinWidth(100);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(2).setMaxWidth(100);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(20, 71, 560, 270);
        getContentPane().add(jSeparator1);
        jSeparator1.setBounds(0, 360, 610, 14);

        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/user-female-blue-add.png"))); // NOI18N
        jButton2.setText("Cadastrar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton2);
        jButton2.setBounds(330, 370, 120, 29);

        Editar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/user-female-blue-edit.png"))); // NOI18N
        Editar.setText("Editar");
        Editar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EditarActionPerformed(evt);
            }
        });
        getContentPane().add(Editar);
        Editar.setBounds(200, 370, 120, 29);

        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/date.png"))); // NOI18N
        jButton4.setText("Agendar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton4);
        jButton4.setBounds(70, 370, 120, 30);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/user-female-blue-delete.png"))); // NOI18N
        jButton1.setText("Excluir");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(460, 370, 120, 29);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-622)/2, (screenSize.height-446)/2, 622, 446);
    }// </editor-fold>//GEN-END:initComponents

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        CadastrarFamilia cadastrar = new CadastrarFamilia(null, true);
        cadastrar.setVisible(true);
        setVisible(false);
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        try {
            //Pega a linha que esta seleconada
            int linha = tabela.getSelectedRow();

            AgendarFamilia agenda = new AgendarFamilia(null, true);

            //Inicia uma Transação
            sessao = HibernateUtil.openSession();
            sessao.getTransaction().begin();

            // Pega o id da Família selecionada
            int familiaId = Integer.parseInt(tabela.getValueAt(linha, 0).toString());

            familia = (Familia) sessao.createQuery("From pbf.conf.hibernate.entidades.Familia where FAMILIA_ID =" + familiaId).uniqueResult();
            agenda.setFormulario(familia);

            sessao.getTransaction().commit();
            sessao.close();
            setVisible(false);
            agenda.setVisible(true);
        } catch (Exception e) {
            Mensagem.mensagerio("Selecione um registro da Tabela para Continua: ", "Mensagem", Mensagem.ATENCAO_MENSAGEM);
        }
    }//GEN-LAST:event_jButton4ActionPerformed

    private void EditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_EditarActionPerformed
        try {
            //Pega a linha que esta seleconada
            int linha = tabela.getSelectedRow();

            EditarFamilia editarFamilia = new EditarFamilia(null, true);

            //Inicia uma Transação
            sessao = HibernateUtil.openSession();
            sessao.getTransaction().begin();

            // Pega o id da Família selecionada
            int familiaId = Integer.parseInt(tabela.getValueAt(linha, 0).toString());

            familia = (Familia) sessao.createQuery("From pbf.conf.hibernate.entidades.Familia where FAMILIA_ID =" + familiaId).uniqueResult();

            sessao.getTransaction().commit();
            sessao.close();

            editarFamilia.setFormulario(familia);
            setVisible(false);
            editarFamilia.setVisible(true);
        } catch (Exception e) {
            Mensagem.mensagerio("Selecione um registro da Tabela para Continua " + e, "Mensagem", Mensagem.ATENCAO_MENSAGEM);
        }
    }//GEN-LAST:event_EditarActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        try {
            //Pega a linha que esta seleconada
            int linha = tabela.getSelectedRow();

            //Inicia uma Transação
            sessao = HibernateUtil.openSession();
            sessao.getTransaction().begin();

            // Pega o id da Família selecionada
            int familiaId = Integer.parseInt(tabela.getValueAt(linha, 0).toString());

            familia = (Familia) sessao.createQuery("From pbf.conf.hibernate.entidades.Familia where FAMILIA_ID =" + familiaId).uniqueResult();

            if (Mensagem.mensageiroDialog("Deseja continua para remover este cadastro?", "Remover", Mensagem.SIM_NAO_OPCAO, getClass().getResource("/pbf/imagens/deletando.png")) == Mensagem.SIM_OPCAO) {
                if (Mensagem.mensageiroDialog("Tem certeza que deseja remove o cadastra do(a) Senhor(a)\n " + familia.getFamiliaNome(), "Remover", Mensagem.SIM_NAO_OPCAO, getClass().getResource("/pbf/imagens/deletando.png")) == Mensagem.SIM_OPCAO) {
                    familia.setFamiliaAtivo("N");
                    sessao.update(familia);
                }
            }

            sessao.getTransaction().commit();
            sessao.close();

            //Atualiza a tabela para o registro deletado desaparecer
            setTable();
        } catch (Exception e) {
            Mensagem.mensagerio("Selecione um registro da Tabela para Continua", "Mensagem", Mensagem.ATENCAO_MENSAGEM);
        }
    }//GEN-LAST:event_jButton1ActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Editar;
    private static javax.swing.JTextField familiaNome;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    public static javax.swing.JTable tabela;
    // End of variables declaration//GEN-END:variables
}

class AutoCompletar extends Thread {

    private String pesquisaAnterior = "";

    public void run() {
        do {
            if (!GestaoFamilia.getFamiliaNome().equals(pesquisaAnterior)) {
                atualizar();
            }

            try {
                sleep(1500);
            } catch (InterruptedException ex) {
            }
        } while (true);
    }

    private void atualizar() {
        pesquisaAnterior = GestaoFamilia.getFamiliaNome();

        Session sessao = HibernateUtil.openSession();
        sessao.beginTransaction();

        List listaFamilia = (List<Familia>) sessao.createQuery("From pbf.conf.hibernate.entidades.Familia where FAMILIA_ATIVO='S' AND FAMILIA_NOME LIKE '" + GestaoFamilia.getFamiliaNome() + "%' order by FAMILIA_NOME").list();
        GestaoFamilia.setTabela(listaFamilia);

        sessao.getTransaction().commit();
        sessao.close();
    }
}
